package leetcode.editor.cn;

//「力扣挑战赛」心算项目的挑战比赛中，要求选手从 `N` 张卡牌中选出 `cnt` 张卡牌，若这 `cnt` 张卡牌数字总和为偶数，则选手成绩「有效」且得分为
// `cnt` 张卡牌数字总和。
//给定数组 `cards` 和 `cnt`，其中 `cards[i]` 表示第 `i` 张卡牌上的数字。 请帮参赛选手计算最大的有效得分。若不存在获取有效得分
//的卡牌方案，则返回 0。
//
//**示例 1：**
//
//> 输入：`cards = [1,2,8,9], cnt = 3`
//>
//> 输出：`18`
//>
//> 解释：选择数字为 1、8、9 的这三张卡牌，此时可获得最大的有效得分 1+8+9=18。
//
//**示例 2：**
//
//> 输入：`cards = [3,3,1], cnt = 1`
//>
//> 输出：`0`
//>
//> 解释：不存在获取有效得分的卡牌方案。
//
//**提示：**
//- `1 <= cnt <= cards.length <= 10^5`
//- `1 <= cards[i] <= 1000`
//
// Related Topics 贪心 数组 排序 👍 104 👎 0

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.stream.IntStream;

public class UOAnQW {
    public static void main(String[] args) {
        Solution solution = new UOAnQW().new Solution();
        solution.maxmiumScore(new int[]{7, 6, 4, 6}, 1);
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int maxmiumScore(int[] card, int cnt) {
            Integer[] cards = IntStream.of(card).boxed().toArray(Integer[]::new);
            // 打印转换后的 Integer 数组
            Arrays.sort(cards,new Comparator<Integer>(){
                @Override
                public int compare(Integer o1, Integer o2) {
                    return o2 - o1;
                }
            });
            //计算前个的和; //求出前面的最小奇数和最小偶数
            int sum = 0;
            int preMinOdd = Integer.MAX_VALUE, preMinEven = Integer.MAX_VALUE;
            for (int i = 0; i < cnt; i++) {
                sum += cards[i];
                if (cards[i] % 2 != 0) {
                    preMinOdd = Math.min(preMinOdd, cards[i]);
                }
                if (cards[i] % 2 == 0) {
                    preMinEven = Math.min(preMinEven, cards[i]);
                }
            }
            if (sum % 2 == 0) {
                return sum;
            }

            //计算最大的偶数和奇数
            int maxOdd = Integer.MIN_VALUE, maxEven = Integer.MIN_VALUE;
            for (int i = cnt; i < cards.length; i++) {
                if (cards[i] % 2 == 0) {
                    maxEven = Math.max(maxEven, cards[i]);
                }
                if (cards[i] % 2 != 0) {
                    maxOdd = Math.max(maxOdd, cards[i]);
                }
            }
             //计算两个的大小
            int sum2 = 0, sum3 = 0;
            if (preMinOdd != Integer.MAX_VALUE && maxEven != Integer.MIN_VALUE) {
                sum3 = sum - preMinOdd + maxEven;
            }
            if (preMinEven != Integer.MAX_VALUE && maxOdd != Integer.MIN_VALUE) {
                sum2 = sum - preMinEven + maxOdd;
            }
            return Math.max(sum2, sum3);

        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
